#include<iostream>
#include<queue>
using namespace std;
const int maxn=30;
int N;
int post[maxn],in[maxn];
struct node{
    int data;
    node *lchild=NULL;
    node *rchild=NULL;
};

node* create(int postL,int postR,int inL,int inR){
    if(postL>postR) return NULL;
    int k=post[postR];
    int temp;
    for(int i=inL;i<=inR;i++){
        if(in[i]==k) {temp=i;break;}
    }
    node* root=new node;
    root->data=k;
    root->lchild=create(postL,postL+temp-inL-1,inL,temp-1);
    root->rchild=create(postL+temp-inL,postR-1,temp+1,inR);
    return root;
}
void levelorder(node* root){
    queue<node*> que;
    vector<int> ans;
    while(!que.empty())que.pop();
    que.push(root);
    node* tmp;
    while(!que.empty()){
        tmp=que.front();que.pop();
        ans.push_back(tmp->data);
        if(tmp->lchild!=NULL)que.push(tmp->lchild);
        if(tmp->rchild!=NULL)que.push(tmp->rchild);
    }
    for(int i=0;i<ans.size();i++){
        if(i==0)printf("%d",ans[i]);
        else printf(" %d",ans[i]);
    }
}

int main(){
    //freopen("in.txt","r",stdin);
    scanf("%d",&N);
    for(int i=0;i<N;i++){
        scanf("%d",&post[i]);
    }
    for(int i=0;i<N;i++){
        scanf("%d",&in[i]);
    }
    node* root;
    root=create(0,N-1,0,N-1);
    levelorder(root);
    return 0;
}
